﻿using System;
using System.IO;
using System.Threading;
using System.Threading.Tasks;

class Program
{
    static void Main(string[] args)
    {
        string sourceDir = @"C:\SourceFolder";      // 源文件夹路径
        string destDir = @"C:\DestFolder";          // 目标文件夹路径

        Console.WriteLine("=== 多线程文件拷贝 ===");

        // 检查源文件夹是否存在
        if (!Directory.Exists(sourceDir))
        {
            Console.WriteLine($"源文件夹不存在: {sourceDir}");
            return;
        }

        // 创建目标文件夹
        Directory.CreateDirectory(destDir);

        // 获取所有文件
        string[] files = Directory.GetFiles(sourceDir);
        Console.WriteLine($"找到 {files.Length} 个文件需要拷贝");

        // 使用多线程拷贝文件
        Parallel.ForEach(files, file =>
        {
            string fileName = Path.GetFileName(file);
            string destFile = Path.Combine(destDir, fileName);

            try
            {
                // 使用FileStream进行文件拷贝，支持大文件
                using (FileStream sourceStream = new FileStream(file, FileMode.Open, FileAccess.Read))
                using (FileStream destStream = new FileStream(destFile, FileMode.Create, FileAccess.Write))
                {
                    byte[] buffer = new byte[81920]; // 80KB缓冲区
                    int bytesRead;

                    while ((bytesRead = sourceStream.Read(buffer, 0, buffer.Length)) > 0)
                    {
                        destStream.Write(buffer, 0, bytesRead);
                    }
                }

                Console.WriteLine($"线程 {Thread.CurrentThread.ManagedThreadId}: 成功拷贝 {fileName}");
            }
            catch (Exception ex)
            {
                Console.WriteLine($"拷贝文件 {fileName} 时出错: {ex.Message}");
            }
        });

        Console.WriteLine("文件拷贝完成！");
        Console.ReadKey();
    }
}